package com.hb.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean;

import javax.sql.DataSource;
import java.util.Properties;

@Configuration
public class Hibernate3Config {
    /**
     * 如果你使用 Hibernate 3.2 或更高版本（直到 Hibernate 4.0，但不包含这个版本）并且使用 XML 来定义 Hibernate 的映射的话需要定义 spring-orm 包
     * 中的 LocalSessionFactoryBean
     * @param dataSource
     * @return
     */
    @Bean
    public LocalSessionFactoryBean sessionFactoryBean(DataSource dataSource) {
        LocalSessionFactoryBean sfb = new LocalSessionFactoryBean();
        sfb.setDataSource(dataSource);
        sfb.setMappingResources("classpath:hibernate-mapping.xml");
        Properties props = new Properties();
        // 配置 Hibernate 使用 H2 数据库并且要按照 H2Dialect 来构建 SQL
        props.setProperty("dialect", "org.hibernate.dialect.H2Dialect");
        // 配置 Hibernate 如何进行操作的细节
        sfb.setHibernateProperties(props);
        return sfb;
    }

    /**
     * 如果你更倾向于使用注解的方式来定义持久化，并且你还没有使用 Hibernate 4 的话，那么需要使用 AnnotationSessionFactoryBean 来代替 LocalSessionFactoryBean
     * @param dataSource
     * @return
     */
    @Bean
    public AnnotationSessionFactoryBean sessionFactoryBean1(DataSource dataSource) {
        AnnotationSessionFactoryBean sfb = new AnnotationSessionFactoryBean();
        sfb.setDataSource(dataSource);
        sfb.setPackagesToScan("com.hb.domain");
        Properties props = new Properties();
        props.setProperty("dialect", "org.hibernate.dialect.H2Dialect");
        sfb.setHibernateProperties(props);
        return sfb;
    }
}
